/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.rs.manager;

import com.xy.biz.rs.domain.bo.RecordTemplateBO;
import com.xy.biz.rs.domain.bo.RecordTemplateGroupBO;
import com.xy.biz.rs.domain.bo.RecordTemplateItemBO;
import com.xy.biz.rs.domain.query.RecordTemplateByIdQuery;
import com.xy.biz.rs.domain.query.RecordTemplateQuery;
import com.xy.lang.domain.tuples.Pair;

import java.util.Collection;
import java.util.List;

/**
 *
 *
 * @author zsp
 * @date 2022-1-4
 */
public interface RecordTemplateManager {

    /**
     * 保存
     *
     * @param recordTemplateBO
     */
    int saveRecordTemplate(RecordTemplateBO recordTemplateBO);

    /**
     * 更新
     *
     * @param recordTemplateBO
     */
    int updateRecordTemplate(RecordTemplateBO recordTemplateBO);

    /**
     * 删除
     *
     * @param recordTemplateId
     */
    int deleteRecordTemplate(Long recordTemplateId);

    /**
     * 查找一个
     *
     * @param query
     * @return
     */
    RecordTemplateBO getRecordTemplate(RecordTemplateByIdQuery query);

    RecordTemplateItemBO getRecordTemplateItem(Long recordTemplateItemId);

    RecordTemplateGroupBO getRecordTemplateGroup(Long recordTemplateGroupId, Boolean withItem);

    /**
     * 查找多个
     *
     * @param collection 标识集合
     */
    List<RecordTemplateBO> listRecordTemplateById(Collection<Long> collection);

    /**
     * 查找多个
     *
     * @param query 查找条件
     */
    List<RecordTemplateBO> listRecordTemplate(RecordTemplateQuery query);

    /**
     * 统计个数
     *
     * @param query 查找条件
     */
    int countRecordTemplate(RecordTemplateQuery query);

    /**
     * 保存
     *
     * @param recordTemplateGroupBO
     */
    int saveRecordTemplateGroup(RecordTemplateGroupBO recordTemplateGroupBO);

    /**
     * 更新
     *
     * @param recordTemplateGroupBO
     */
    int updateRecordTemplateGroup(RecordTemplateGroupBO recordTemplateGroupBO);

    /**
     * 更新
     *
     * @param collection
     */
    int updateAllRecordTemplateGroup(Collection<RecordTemplateGroupBO> collection);

    /**
     * 删除
     *
     * @param data
     * @return
     */
    int deleteRecordTemplateGroup(Pair<Long, Collection<RecordTemplateGroupBO>> data);

    /**
     * 查找多条
     *
     * @param recordTemplateId
     * @return
     */
    List<RecordTemplateGroupBO> listRecordTemplateGroupByTemplateId(Long recordTemplateId, boolean withItem);

    List<RecordTemplateGroupBO> groupRecordTemplateGroupByTemplateId(List<Long> recordTemplateIdList, boolean withItem);

    List<RecordTemplateItemBO> listRecordTemplateItemByGroupId(Long recordTemplateGroupId);

    /**
     * 保存
     *
     * @param recordTemplateItemBO
     */
    int saveRecordTemplateItem(RecordTemplateItemBO recordTemplateItemBO);

    /**
     * 更新
     *
     * @param recordTemplateItemBO
     */
    int updateRecordTemplateItem(RecordTemplateItemBO recordTemplateItemBO);

    /**
     * 更新
     *
     * @param collection
     */
    int updateAllRecordTemplateItem(Collection<RecordTemplateItemBO> collection);

    /**
     * 删除
     *
     * @param data
     * @return
     */
    int deleteRecordTemplateItem(Pair<Long, Collection<RecordTemplateItemBO>> data);

}
